board: a pill is a label, not a paragraph — the second half of the phone fix - #270
Merged
Jammy2211 merged 1 commit intoAug 24, 2026
Merged
Conversation
…one fix Wrapping became the page default last change, and the Mind and Memory boards went quiet. Brain and Heart still scrolled, because `white-space:nowrap` is what makes a chip read as a chip and is therefore the one thing an inherited `overflow-wrap` cannot reach. Rendered from the real Mind and the committed dev-box observation and measured in a headless Chromium at a 375px viewport, the Brain board's document was 1271px wide — 896px off-screen. Every offender was one element: a `.pill` in the 🤖 Autonomous runs section, the widest at 1255px, carrying safe (feature medium cap; same resumed acknowledged launch and campaign merge authorization) The autonomy log writes its two judgement columns as `<verdict> (<why>)` because it is a record read as a table, and `collect_autonomy` passed them to `pills()` whole. The same bug was already eating the colour: `_LEVEL_TONES` and `_OUTCOME_TONES` key off the bare verdict, so every one of those rows rendered neutral — a `safe` run and a `human-required` one looked alike. Two changes, one per layer: * `collect_autonomy` trims each judgement cell to its verdict (the `why` stays in the log, which is what the section points at), capped at 28 characters with an ellipsis for the cells that carry no parenthetical. `task` was already capped at 70; these two were the omission. The tones resolve again. * The theme bounds every pill — `max-width:100%`, `overflow:hidden`, `text-overflow:ellipsis` — so a board that hands a chip a sentence gets an ellipsis rather than a page that scrolls. `vertical-align` moves to `bottom` because `overflow:hidden` puts an inline-block's baseline on its bottom edge. This is the guard the last change could not express: the wrap default covers everything that may wrap, this covers the one thing that may not. Re-measured after the change: Brain 375/375 at 390px and 305/305 at 320px, from the same real data. Heart could not be reproduced overflowing from any snapshot buildable here (all-green, STALE, RED, the full 25-repo table, the performance and NO_RUN blocks, nowrap link labels) — its own stylesheet's `td.name`/`a.out` nowrap rules are the remaining suspects, and they live in PyAutoHeart. 467 tests pass; PyAutoHeart's dashboard suite (66) and PyAutoMind's (181) pass against the new theme. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VhpLPmmoSFAtVpppG8azVA
This was referenced Aug 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #266. That change made wrapping the page default and the Mind and Memory boards went quiet — but Brain and Heart still scrolled, because
white-space:nowrapis what makes a chip read as a chip and is therefore the one thing an inheritedoverflow-wrapcannot reach.The measurement
Rendered from the real Mind and the committed dev-box observation, in a headless Chromium at a 375px viewport:
Every offender was one element — a
.pillin the 🤖 Autonomous runs section, carrying:The cause
autonomy_log.mdwrites its two judgement columns as<verdict> (<why>), because it is a record read as a table.collect_autonomypassed them topills()whole.The same bug was already eating the colour:
_LEVEL_TONESand_OUTCOME_TONESkey off the bare verdict, so every one of those rows rendered neutral — asaferun and ahuman-requiredone looked alike.The change, one per layer
collect_autonomytrims each judgement cell to its verdict; thewhystays in the log, which is what the section points at. Capped at 28 characters with an ellipsis for cells carrying no parenthetical.taskwas already capped at 70 — these two were the omission. The tones resolve again.max-width:100%,overflow:hidden,text-overflow:ellipsis), so a board that hands a chip a sentence gets an ellipsis rather than a page that scrolls.vertical-alignmoves tobottombecauseoverflow:hiddenputs an inline-block's baseline on its bottom edge. This is the guard board theme: make wrapping the page default so no board scrolls sideways #266 could not express: the wrap default covers everything that may wrap; this covers the one thing that may not.Heart
Not reproduced. No snapshot buildable here overflows — all-green, STALE, RED, the full 25-repo table, the performance and NO_RUN census blocks, and nowrap
run ↗link labels on long workspace names all measure 375/375. The live page can't be fetched from the session (its Pages host is blocked by the egress policy), so the remaining suspects are named rather than proven:table.board td.name{white-space:nowrap}anda.out{white-space:nowrap}in PyAutoHeart's own_EXTRA_CSS— the same class of trap this PR closes in the theme, but living in that repo.Tests
467 pass, including two new ones — the theme's pill bound, and a board test that a sentence-length log cell becomes a chip-sized label with its tone intact. PyAutoHeart's dashboard suite (66) and PyAutoMind's (181) pass against the new theme.
Generated by Claude Code